/**
 * 同步读取文件会阻塞后续代码执行
 * fs.openSync(path, flags[, mode]) 方法用于打开文件, 返回文件描述符，属于同步方法
 * 参数1: path 文件路径 必选参数
 * 参数2: flags 文件打开模式 必选参数
 * 参数3: mode 设置文件模式(权限) 默认为 0o666
 * 
 * fs.open(path, flags[, mode], callback) 方法用于打开文件, 异步方法
 * 参数1: path 文件路径 必选参数
 * 参数2: flags 文件打开模式 必选参数
 * 参数3: mode 设置文件模式(权限) 默认为 0o666
 * 参数4: callback 回调函数, 打开文件完成后执行的回调函数 必选参数
 * 不建议使用 fs.open 方法打开文件, 因为 fs.open 方法会返回一个文件描述符, 需要手动关闭文件描述符，属于异步方法
 * 不会阻塞后续代码执行
 * 
 * 以上两种方式只要获取到文件描述符, 就可以对文件进行读写操作
 */

/**
 * 同步读取文件标识符
 * r+ 此标志打开文件用于读写。如果文件不存在，则会发生异常。
 * r  此标志打开文件用于读取。如果文件不存在，则会发生异常。
 * w+ 此标志打开文件用于读写。如果文件不存在则创建文件，如果文件存在则截断文件。
 * w  此标志打开文件用于写入。如果文件不存在则创建文件，如果文件存在则截断文件。
 * a+ 此标志打开文件用于读写。如果文件不存在则创建文件，如果文件存在则追加文件。
 * a  此标志打开文件用于写入。如果文件不存在则创建文件，如果文件存在则追加文件。
 */
const fs = require('fs');
const path = require('path');

function openFile() {
    /**
     * r 此标志打开文件用于读取。如果文件不存在，则会发生异常。
     */
    fs.open(path.join(__dirname, 'test1.txt'), 'a+', (err, fd) => {
        if (fd) {
            fs.write(fd, '\n a  此标志打开文件用于写入。如果文件不存在则创建文件，如果文件存在则追加文件。', (err) => {
                if (err) {
                    console.log('\n', err);
                } else {
                    console.log('文件写入成功');
                }
            });
        }
    });
}

openFile()
console.log('是否阻塞后续代码执行')